package com.wenjie.terminal.entity;

import com.alibaba.fastjson2.JSONObject;

import java.io.Serializable;

import lombok.Data;

/**
 * 公共响应类
 */
@Data
public class CResponse<T> implements Serializable {

    private static final int SUCCESS = 200;
    private static final int FAIL = 500;

    private static final String SUCCESS_MSG = "操作成功";
    private static final String FAIL_MSG = "操作失败";

    /**
     * 响应码
     */
    private int code;

    /**
     * 提示信息
     */
    private String message;

    /**
     * 响应数据
     */
    private T data;

    /**
     * 生成默认的、JSON格式的成功响应
     */
    public static JSONObject successJson() {
        JSONObject json = new JSONObject();

        json.put("code", SUCCESS);
        json.put("message", SUCCESS_MSG);
        json.put("data", null);

        return json;
    }

    /**
     * 生成响应体为字符串的JSON格式成功响应
     */
    public static JSONObject successWithStrJson(String message) {
        JSONObject json = new JSONObject();

        json.put("code", SUCCESS);
        json.put("message", SUCCESS_MSG);
        json.put("data", message);

        return json;
    }

    /**
     * 生成自定义响应数据的JSON格式成功响应
     */
    public static <T> JSONObject successJson(T data) {
        JSONObject json = new JSONObject();

        json.put("code", SUCCESS);
        json.put("message", SUCCESS_MSG);
        json.put("data", data);

        return json;
    }

    /**
     * 生成默认的JSON格式失败响应
     */
    public static JSONObject errorJson() {
        JSONObject json = new JSONObject();

        json.put("code", FAIL);
        json.put("message", FAIL_MSG);
        json.put("data", null);

        return json;
    }

    /**
     * 生成响应体为字符串的JSON格式失败响应
     */
    public static JSONObject errorWithStrJson(String message) {
        JSONObject json = new JSONObject();

        json.put("code", FAIL);
        json.put("message", FAIL_MSG);
        json.put("data", message);

        return json;
    }

    /**
     * 生成自定义响应数据的JSON格式失败响应
     */
    public static <T> JSONObject errorJson(T data) {
        JSONObject json = new JSONObject();

        json.put("code", FAIL);
        json.put("message", FAIL_MSG);
        json.put("data", data);

        return json;
    }
}
